#include<string.h>
//思路：创建一个指针数组，依次让指针指向原数组中存有每个人的序号的元素的地址，遍历后对指针数组所指向的内容进行排序，最后按顺序依照指针所指向的内容输出

void  sortAndOutput(int* data, int size)
{
	int *p[1003]={}, k=0;  //p为存放序号地址的数组
    //将序号的地址存在指针数组中
	for(int i=0;i<size; )  
	{
		p[k++]=&data[i++];   
		int n=data[i];  //n就是这个人信息的个数
		while(n--) i++;
		i++;  //让i跳至下一个人的下标
	}
	
    int len=strlen(p); //算出p的长度
    //排序，如果不是升序就交换指针里存放的地址
	for(int i=0;i<len-1;i++)  
	{
		for(int j=0;j<len-i-1;j++)
		{
			if(*p[j]>*p[j+1]) 
			{
				int*temp=p[j];
				p[j]=p[j+1];
				p[j+1]=temp;
			}
		}
	}

    //输出
	for(int i=0;i<len;i++)
	{
		printf("%d %d ",*p[i],*(p[i]+1));  //打印编号的信息数目
		for(int j=1;j<=*(p[i]+1);j++)  //依照信息数目一次往后打印信息
		printf("%d%c",*(p[i]+1+j)," \n"[j==*(p[i]+1)]); 
	}
}


#include<stdio.h>

#define  MAXLEN   500000
void  sortAndOutput(int *data , int size) ;

int main()
{
	int        data[MAXLEN];
	int        n, i;

	scanf( "%d" , &n );
	for ( i = 0 ; i < n ; i++ )
		scanf( "%d" , &data[i] );

	sortAndOutput( data, n ) ;

	return 0;
}
